package fr.musique.bean;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "T_ALBUM")
public class Album implements Serializable {

	private static final long serialVersionUID = -8092823632941437333L;

	public enum TailleVinyl {
		SEPT_INCH("sept"), DIX_INCH("dix"), DOUZE_INCH("douze");

		protected String taille;

		TailleVinyl(String taille) {
			this.taille = taille;
		}

		public String getLangue() {
			return this.taille;
		}
	}

	public enum TypeAlbum {
		LP("lp"), DOUBLE_LP("double_Lp"), EP("ep"), DOUBLE_EP("double_Ep"), MAXI_SINGLE(
				"Maxi_Single"), SINGLE("Single");

		protected String type;

		TypeAlbum(String type) {
			this.type = type;
		}

		public String getTypeAlbum() {
			return this.type;
		}
	}

	private int id;

	private String titre;

	private TailleVinyl taille;

	private String groupe;

	private String producteur;

	private TypeAlbum type;

	private String matriceNumber;

	private List<Musique> musiquesAlbum;

	/**
	 * @return the id
	 */
	@Id
	@GeneratedValue
	@Column(name = "ALBUM_ID")
	public int getId() {
		return id;
	}

	/**
	 * @param id
	 *            the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the titre
	 */
	@Column(name = "titre")
	public String getTitre() {
		return titre;
	}

	/**
	 * @param titre
	 *            the titre to set
	 */
	public void setTitre(String titre) {
		this.titre = titre;
	}

	/**
	 * @return the taille
	 */
	@Column
	public TailleVinyl getTaille() {
		return taille;
	}

	/**
	 * @param taille
	 *            the taille to set
	 */
	public void setTaille(TailleVinyl taille) {
		this.taille = taille;
	}

	/**
	 * @return the groupe
	 */
	@Column
	public String getGroupe() {
		return groupe;
	}

	/**
	 * @param groupe
	 *            the groupe to set
	 */
	public void setGroupe(String groupe) {
		this.groupe = groupe;
	}

	/**
	 * @return the producteur
	 */
	@Column
	public String getProducteur() {
		return producteur;
	}

	/**
	 * @param producteur
	 *            the producteur to set
	 */
	public void setProducteur(String producteur) {
		this.producteur = producteur;
	}

	/**
	 * @return the type
	 */
	@Column
	public TypeAlbum getType() {
		return type;
	}

	/**
	 * @param type
	 *            the type to set
	 */
	public void setType(TypeAlbum type) {
		this.type = type;
	}

	/**
	 * @return the matriceNumber
	 */
	@Column
	public String getMatriceNumber() {
		return matriceNumber;
	}

	/**
	 * @param matriceNumber
	 *            the matriceNumber to set
	 */
	public void setMatriceNumber(String matriceNumber) {
		this.matriceNumber = matriceNumber;
	}

	/**
	 * @return the musiquesAlbum
	 */
	// Jointure entre la table musique et album afin de pouvoir renvoyer la
	// liste des musiques appartenant à l'album
	@OneToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "ALBUM_MUSIQUE", joinColumns = { @JoinColumn(name = "ALBUM_ID") }, inverseJoinColumns = { @JoinColumn(name = "MUSIQUE_ID") })
	public List<Musique> getMusiquesAlbum() {
		return musiquesAlbum;
	}

	/**
	 * @param musiquesAlbum
	 *            the musiquesAlbum to set
	 */
	public void setMusiquesAlbum(List<Musique> musiquesAlbum) {
		this.musiquesAlbum = musiquesAlbum;
	}

}
